package com.JAVA基础.位运算;

/**
 * @author liyiruo
 * @Description
 * @Date 2023/2/14 下午3:18
 */
public class _进制运算 {

    /**
     * 这个方法是在把一个int类型的数字截成4个 8位的2进制数字
     * Integer.MAX_VALUE 2进制 11111111 11111111  11111111  11111111
     * Integer.MAX_VALUE 16进制  0x7fffffff
     *
     * @param n
     * @return
     */
    public static byte[] toHH(int n) {
        byte[] bytes = new byte[4];
        bytes[3] = (byte) (n & 0xff);
        bytes[2] = (byte) (n >> 8 & 0xff);
        bytes[1] = (byte) (n >> 16 & 0xff);
        bytes[0] = (byte) (n >> 24 & 0xff);
        return bytes;
    }

    /**
     * 声明各种进制的变量
     */
    public static void declear(){
        int a = 0b11;   //声明二进制变量
        int b = 011;    //声明八进制变量
        int c = 11;     //声明十进制变量
        int d = 0x11;   //声明十六进制变量
        System.out.println("a：" + a); //3
        System.out.println("b：" + b); //9
        System.out.println("c：" + c); //11
        System.out.println("d：" + d); //17
    }

    /**
     * 将10进制转化为其他进制输出
     */
    public static void trans(int i){
        System.out.println("十进制15对应的二进制为：" + Integer.toBinaryString(i));  //1111
        System.out.println("十进制15对应的八进制为：" + Integer.toOctalString(i));   //17
        System.out.println(i);  //15
        System.out.println("十进制15对应的十六进制为：" + Integer.toHexString(i));    //f
    }

    /**
     *位运算 &运算
     */
    public static void ys() {
        //Integer最大的值 1111111111111111111111111111111   16进制
        int arg = Integer.MAX_VALUE;

        System.out.println(Integer.toBinaryString(arg));
        System.out.println(Integer.toBinaryString(arg >> 8));
        System.out.println(Integer.toBinaryString(arg >> 16));
        System.out.println(Integer.toBinaryString(arg >> 24));
        System.out.println("-----------------------------");
        System.out.println("==>" + Integer.toBinaryString(arg & 0xff));
        System.out.println("==>" + Integer.toBinaryString(arg >> 8 & 0xff));
        System.out.println("==>" + Integer.toBinaryString(arg >> 16 & 0xff));
        System.out.println("==>" + Integer.toBinaryString(arg >> 24 & 0xff));

    }


    /**
     * 把一个长度位4的byte转化为一个整数
     * 这个写法不考虑负数的情况
     * @param bytes
     * @return
     */
    public static int byte2int(byte[] bytes) {
        int length = bytes.length;
        int sum=0;
        int flag=1;
        for (int i = 0; i < length; i++) {
            int temp=bytes[i];
            if (i==0&&temp<0){
                flag=-1;
            }
            if (temp<0){
                temp=temp+256;
            }
               sum+=temp*(Math.pow(256,(length - 1 - i)));
        }
        if (flag==-1){
            sum+=Integer.MIN_VALUE;
        }
        return sum;
    }


    public static void main(String[] args) {
        byte[] bytes = toHH(10033);
        int hh = byte2int(bytes);
        System.out.println("===> "+hh);
        System.out.println(Integer.toString(-129, 2));

        trans(Integer.MAX_VALUE);
    }
}
